library(haven) # read_sav() to read spss files
library(stringr) # str_detect()
library(ggplot2)
theme_set(theme_minimal(base_family='NanumGothic')) # ggplot2에서 한글깨짐 방지
library(MatchIt) # matchit() for propensity score matching
library(cobalt) # love.plot() for assessing balance
데이터
출처에서 설문지, 조사 원자료, 코딩북을 활용하였습니다.
DATA = read_sav("data.sav")
DATA
상관분석(Correlation analysis)
우선 스포츠 참여여부(스포츠르 한번 이상으로 참여하였는지)와 스포츠
여가활동 희망여부(스포츠를 여가활동으로 희망하는지)간의 상관관계를
파악하고자 합니다.
## Data preprocessing
# q1_D: 문1.한 번 이상 참여한 여가활동 - D. 스포츠참여활동(복수응답); 99: 없음
# q11_3_D: 문11.평일에 희망하는 여가활동 -D. 스포츠 참여 활동; 98: 없음, 99: 모름/무응답
# q12_3_D: 문12.휴일에 희망하는 여가활동 -D. 스포츠 참여 활동; 98: 없음, 99: 모름/무응답
df = DATA[, c("ID", "q1_D", "q11_3_D", "q12_3_D")]
# NA to 1
df[is.na(df)] = 1
# 1: 참여/희망, 0: 그렇지 않음
df$have = ifelse(df$q1_D == 99, 0, 1) # 스포츠를 참여해봄
df$q11_3_D = ifelse(df$q11_3_D == 99 | df$q11_3_D == 98, 0, 1)
df$q12_3_D = ifelse(df$q12_3_D == 99 | df$q12_3_D == 98, 0, 1)
# 평일, 주말 합치기
df$would = ifelse(df$q11_3_D + df$q12_3_D == 0, 0, 1) # 스포츠를 희망함
# 필요한 컬럼만
df = df[,c("ID", "have", "would")]
# Create a data frame representing the 2x2 table
tab = table(df$have, df$would)
# Convert the table to a data frame
tab_df = as.data.frame(as.table(tab))
# Rename the columns
names(tab_df) = c("have", "would", "Frequency")
# Create a tile plot using ggplot2
ggplot(tab_df, aes(x = factor(have), y = factor(would), fill = Frequency)) +
geom_tile() +
geom_text(aes(label = sprintf("%d", Frequency)), vjust = 1) +
scale_fill_gradient(low = "beige", high = "brown") +
labs(title = "표1: 2X2 Table of Two Binary Variables",
x = "스포츠 여가활동 희망여부",
y = "스포츠 참여여부",
fill = "Frequency") +
theme(plot.title = element_text(hjust = 0.5))

표1을 보면 두 이진변수간에 양의 상관관계가 있음을 짐작해볼 수
있습니다.
cor.test(df$have, df$would)
Pearson's product-moment correlation
data: df$have and df$would
t = 64.611, df = 10047, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.5278288 0.5554578
sample estimates:
cor
0.5417897
위 결과는 피어슨 상관계수 검정을 통해 스포츠 참여여부(have)와 스포츠
여가활동 희망여부(would)간의 상관관계를 테스트한 것입니다. 검정 결과,
유의수준 5%에서 두 변수 사이에 유의미한 상관관계가 있다는 것을 확인할 수
있습니다. 상관계수의 값이 0.542로, 이는 두 변수가 양의 상관관계를 가지고
있다는 것을 의미합니다. 즉, 스포츠에 참여한 사람들이 스포츠를
여가활동으로 희망할 가능성이 더 높다는 것을 의미합니다.
하지만 상관관계만으로는 인과관계를 설명할 수 없습니다. 인과추론을
위해서는 더 정밀한 통계적 방법이 필요합니다. 상관관계는 두 변수 사이의
관계의 방향과 강도만을 나타내기 때문에, 인과관계의 존재 여부와 그 방향을
확정하기 위해서는 실험 설계나 매칭, 계량적인 causal inference 방법 등이
사용되어야 합니다.
인과추론(Causal inference)
스포츠 참여여부와 스포츠 여가활동 희망여부간의 양의 상관관계가 파악이
되어, 이를 기반으로 인과추론을 하고자 합니다. 연구의 목적은 스포츠
참여를 한 여부가 스포츠 여가활동 희망하는 여부로 인과적으로 이어지는지
알아보는 것입니다.
이를 위해서 propensity score matching(PSM) 방법으로 인과추론을 하려고
합니다. 이는 인과관계를 추정하는 데 널리 사용되는 방법 중 하나로, 관찰된
데이터에서 인과효과를 추정하려는 시도를 설명합니다. 이 방법의 핵심은,
control 그룹(스포츠를 참여하지 않은 이들)과 treated 그룹(스포츠를 참여한
이들)간의 혼동변수(confounding variable) 차이를 줄이는 데 사용되며, 이는
인과추론을 왜곡할 수 있는 혼동변수의 영향을 제거하는 데 도움이
됩니다.
다시 말해, 스포츠 참여여부와 스포츠 여가활동 희망여부간의 인과관계를
추론하려면, 두 변수 간의 관계에 영향을 줄 수 있는 혼동변수들을 고려하여
매칭을 해야합니다. 해당 연구 목표와 관련하여 다음 변수들을 혼동변수들로
고려해볼 수 있습니다:
- q39 ~ q44_1(응답자의 인구통계학적 특성): 응답자의
성별, 연령, 학력 등은 스포츠 참여와 취미 활동의 의사 결정에 영향을 미칠
수 있는 핵심 요인입니다.
- q45, q49_1(경제적 환경): 응답자의 경제적 환경은
스포츠 참여에 필요한 재정적 요소를 반영하여, 참여 의사나 희망 여부와
관련된 중요한 설명 변수로 작용할 것입니다.
- DM9, DM10(지역규모, 권역): 거주 지역의 특성은
스포츠 시설 접근성과 관련이 있을 수 있으므로 중요한 변수로 볼 수
있습니다.
- q28(일/학업과 여가의 균형): 일과 여가의 균형이
얼마나 잘 이루어지고 있는지는 스포츠 활동 참여 여부에 영향을 줄 수
있습니다.
- q34(본인의 건강상태 인식): 건강 상태는 스포츠 활동
참여 여부와 직접적인 관련이 있을 수 있으므로 중요한 변수로 고려될 수
있습니다.
## Data preprocessing
# (응답자의 인구통계)
# q39: 최종학력
# q40: 혼인상태
# q41: 만 나이
# q43: 가구주 여부
# q43_2: 성별
# q44_1: 장애등록 여부
# (경제적 환경)
# q45: 지난 1주간 경제활동 여부
# q49_1: 월 평균 소득
# (지역 및 지역 규모)
# DM9: 지역 규모
# DM10: 권역
# (일/학업과 여가의 균형)
# q28: 일(학업)과 여가의 균형
# (본인의 건강상태 인식)
# q34: 본인의 건강상태 인식
df2 = DATA[, c("ID", "q39", "q40", "q41", "q43", "q43_2", "q44_1", "q45", "q49_1", "DM9", "DM10", "q28", "q34")]
df3 = merge(df, df2, by = "ID") # Joining two dataframes on a matching ID
df3 = df3[, -1] # No need for "ID" column anymore
df3[] = lapply(df3, as.numeric) # because the data was in spss form
df3$q39 = ifelse(df3$q39 <= 4, 0, 1) # 고졸이하: 0 / 대졸이상: 1
df3$q40 = ifelse(df3$q40 == 1, 0, 1) # 미혼: 0 / 기혼, 사별, 이혼 등: 1
df3$q44_1 = ifelse(df3$q44_1 == 1, 0, 1) # 없음: 0, 장애: 1
df3$q49_1 = ifelse(df3$q49_1 <= 3, 0, 1) # 200만 미만: 0, 200만 이상: 1
df3$q34 = ifelse(df3$q34 <= 3, 0, ifelse(df3$q34 == 4, 1, 2)) # 보통 이하: 0, 보통: 1, 보통 이상: 2
df3$q28 = ifelse(df3$q28 <= 3, 0, ifelse(df3$q28 == 4, 1, 2)) # 균형 이하: 0, 균형: 1, 균형 이상: 2
# Convert all columns except the excluded one to factors
df3[!colnames(df3) %in% c("q41")] = lapply(df3[!colnames(df3) %in% c("q41")], as.factor)
df3
set.seed(0)
## Estimate Propensity Scores:
# We first estimate the propensity scores for the "have" variable, based on the covariates we want to control for. This involves fitting a logistic regression model predicting "have" from the covariates.
## Matching
# matchit() will perform nearest neighbor matching, but there are many other methods available in MatchIt. The result of the match will be stored in m.out.
all_vars = setdiff(names(df3), c("have", "would"))
formula = as.formula(paste("have ~", paste(all_vars, collapse = " + ")))
m.out = matchit(formula, data = df3, method = "optimal")
Warning: Fewer control units than treated units; not all treated units will get a match.
## Assessing balance
# Before conducting the causal inference analysis, we should assess whether matching has improved the balance of the covariates across the treated and control groups.
love.plot(m.out, abs = TRUE, binary = "std", threshold = 0.15, limits = c(0, 1), position = "top", drop.distance = TRUE)

Propensity Score Matching(PSM)에서 균형 평가(assessing balance)를
하는 목적은 처리 그룹과 대조 그룹 간의 혼동변수가 비슷하게 분포되어
있는지 확인하기 위함입니다. 이는 관찰 연구에서 처리 효과를 추정할 때
혼동변수로 인한 편향을 줄이기 위한 중요한 단계입니다.
균형 평가에서 확인해야 할 주요 요소는 다음과 같습니다:
- 표준화 평균 차이(Standardized Mean Differences,
SMD): 처리 그룹과 대조 그룹 간의 혼동변수의 표준화된 평균
차이를 계산합니다. 이 값이 0에 가까울수록 혼동변수가 두 그룹 간에 잘
균형되어 있다는 것을 나타냅니다.
- 임계값(Threshold): 일반적으로 SMD의 절대값이 0.1
또는 0.15 미만이면 균형이 잘 되었다고 판단합니다. 이 임계값을 초과하면
해당 혼동변수는 두 그룹 간에 차이가 있다고 판단됩니다.
- 균형 그래프(Balance Plot): Love(Thomas Love) plot과
같은 균형 그래프는 시각적으로 혼동변수의 균형 상태를 확인할 수 있는
도구입니다. 매칭 전후의 SMD를 비교하여 매칭의 효과를 평가할 수
있습니다.
매칭이 잘 되었다는 것은 처리 그룹과 대조 그룹 간의 공변량이 비슷하게
분포되어 있으며, 혼동 효과를 최소화하여 처리의 인과 효과를 보다 정확하게
추정할 수 있다는 것을 의미합니다.
위 그림을 보면 조정 후 절반 정도만 혼동변수가 임계값 내에 있고, 이는
균형이 이루어졌다는 증거는 되지 못합니다.
## Causal inference
# After matching, we can analyze the effect of "have" on "would" by fitting a model to the matched data.
matched_data = match.data(m.out)
causal_model = glm(would ~ have, data = matched_data, family = binomial)
summary(causal_model)
Call:
glm(formula = would ~ have, family = binomial, data = matched_data)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.23199 0.02851 -8.137 4.04e-16 ***
have1 3.00607 0.06662 45.121 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 12324.1 on 9975 degrees of freedom
Residual deviance: 9077.7 on 9974 degrees of freedom
AIC: 9081.7
Number of Fisher Scoring iterations: 5
스포츠 참여여부의 스포츠 여가활동 희망여부에 대한 인과
효과: “have”(스포츠 참여여부)의 계수는 3.006으로, 이 값의
지수는 “have”가 있을 때와 없을 때 “would”(스포츠 여가활동 희망여부)의
오즈비(odds ratio)입니다. 이 양의 값은 “have”의 존재가 “would”의
가능성을 크게 증가시킨다는 것을 나타냅니다. 매칭 과정이 혼동 변수를
성공적으로 통제했다면, 이것은 인과 관계의 증거로 해석될 수
있습니다.
통계적 유의성: “have”의 매우 낮은 p 값은 효과가
통계적으로 유의하다는 것을 나타냅니다. 이는 “have”가 “would”에 인과적
영향을 미칠 수 있다는 생각을 더욱 지지합니다.
모델 적합성과 AIC: 분산의 감소와 AIC 값은 모델
적합성의 지표일 수 있습니다. 이것들은 일반적으로 예측 성능과 더 관련이
있지만, 잘 적합된 모델은 인과적 해석에 대한 확신을 더할 수 있습니다.
Null deviance는 변수를 넣지 않았을 때, Residual deviance는 설명변수를
추가하였을 때의 분산입니다. 설명변수를 추가한 후 분산이 준 것을 보면 잘
적합된 모델이라고 할 수 있습니다.
가정: 인과 추론은 매칭 과정에서 모든 혼동 변수를
통제했다는 가정에 의존합니다. 이를 측정되지 않은 혼동 변수가 없다는
가정이라고도 합니다. 이 가정이 유효하다면, 매칭 과정은 비교 가능한
그룹을 생성하므로 인과적 해석이 가능합니다. 하지만, love plot을 그린
결과 모든 혼동 변수가 통제되었다는 가정은 이루어졌다고 하기
어렵습니다.
결론
요약하면, 결과는 스포츠 참여여부와 스포츠
여가활동 희망여부 사이의 강한 연관성을 나타났지만, 매칭 과정이
관련 혼동 변수를 모두 균형시키는 데 성공하지
못하였습니다. 만약, 인과추론을 위한 가정이 유효하다면
인과효과로 해석될 수 있습니다.
Propensity score matching을 사용한 상황에서 혼동 변수를 모두
균형시키지 못했다면, 다음과 같은 조치를 취해 볼 수 있습니다:
- 다른 매칭 기법 적용: 프로펜시티 스코어 매칭 외에도
다양한 매칭 기법이 있으므로, 그 중 일부를 적용해 볼 수 있습니다. 예를
들어, 최적 매칭(optimal matching), 커널 매칭(kernel matching),
Mahalanobis 거리 매칭 등을 사용해 볼 수 있습니다. 또한 매칭 방법의 세부
파라미터를 조정해 보는 것도 방법입니다.
- 회귀 분석 사용: 매칭 후에도 혼동 변수의 균형이 맞지
않는다면, 회귀 모델을 사용하여 혼동 변수를 조정할 수 있습니다. 회귀
분석을 통해 혼동 변수의 영향을 제어하면서 효과를 추정할 수
있습니다.
- 데이터 재검토: 혼동 변수가 균형되지 않았다면,
사용된 데이터에 문제가 있을 수도 있습니다. 데이터 전처리 과정, 결측치
처리, 변수 선택 등을 다시 검토해 보는 것이 필요할 수 있습니다.
- 분석 방법 변경: 매칭 기법 자체가 적절하지 않을 수도
있으므로, 다른 인과추론 방법을 고려해 볼 수 있습니다. 도구 변수
기법(instrumental variable), 중첩 로지스틱 회귀(conditional logistic
regression) 등 다른 추론 방법을 탐색해 볼 수 있습니다.
- 편향의 출처 탐색: 혼동 변수가 균형되지 않는 원인을
파악하려면, 편향이 발생한 원인을 분석해야 할 수도 있습니다. 이를 통해
편향을 줄이거나 보정할 수 있는 방법을 찾을 수 있습니다.
LS0tCnRpdGxlOiAi7J246rO87LaU66GgIgpzdWJ0aXRsZTogIuyKpO2PrOy4oCDssLjsl6wg7Jes67aA7JmAIOyKpO2PrOy4oOulvCDst6jrr7jtmZzrj5nsnLzroZwg7Z2s66edIOyXrOu2gOqwhOydmCDqtIDqs4QiCmF1dGhvcjogIuydtOyerOyaqSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgY29kZV9mb2xkaW5nOiAibm9uZSIKLS0tCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpoMS50aXRsZSB7CiAgZm9udC1zaXplOiAzMHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoMy5zdWJ0aXRsZSB7CiAgZm9udC1zaXplOiAyMHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxOHB4OwogIHRleHQtYWxpZ246IHJpZ2h0Owp9CmJvZHl7CiAgIGZvbnQtc2l6ZTogMTdweDsgICMgYm9keSBpcyBmb3Igbm9ybWFsIHRleHQKfQp0ZHsKICAgZm9udC1zaXplOiAxMnB4OyAgIyB0ZCBpcyBmb3IgdGFibGUgZGF0YQp9Cjwvc3R5bGU+CgpgYGB7cn0KbGlicmFyeShoYXZlbikgICMgcmVhZF9zYXYoKSB0byByZWFkIHNwc3MgZmlsZXMKbGlicmFyeShzdHJpbmdyKSAgIyBzdHJfZGV0ZWN0KCkKbGlicmFyeShnZ3Bsb3QyKQp0aGVtZV9zZXQodGhlbWVfbWluaW1hbChiYXNlX2ZhbWlseT0nTmFudW1Hb3RoaWMnKSkgICMgZ2dwbG90MuyXkOyEnCDtlZzquIDquajsp5Ag67Cp7KeACmxpYnJhcnkoTWF0Y2hJdCkgICMgbWF0Y2hpdCgpIGZvciBwcm9wZW5zaXR5IHNjb3JlIG1hdGNoaW5nCmxpYnJhcnkoY29iYWx0KSAgIyBsb3ZlLnBsb3QoKSBmb3IgYXNzZXNzaW5nIGJhbGFuY2UKYGBgCgpcCgpb642w7J207YSwIOy2nOyymF0oaHR0cHM6Ly9wb2xpY3lkYi5rY3RpLnJlLmtyLyMvc3VydmV5TGVpc3VyZTQ/YmJzdHlwZWNkPTMwMDMwMTMmcG9zdHN0YXRjZD0xNDAwKeyXkOyEnCDshKTrrLjsp4AsIOyhsOyCrCDsm5DsnpDro4wsIOy9lOuUqeu2geydhCDtmZzsmqntlZjsmIDsirXri4jri6QuCgpcCgpgYGB7cn0KREFUQSA9IHJlYWRfc2F2KCJkYXRhLnNhdiIpCkRBVEEKYGBgCgpcClwKCiMjIOyDgeq0gOu2hOyEnShDb3JyZWxhdGlvbiBhbmFseXNpcykKClwKCuyasOyEoCDsiqTtj6zsuKAg7LC47Jes7Jes67aAKOyKpO2PrOy4oOultCDtlZzrsogg7J207IOB7Jy866GcIOywuOyXrO2VmOyYgOuKlOyngCnsmYAg7Iqk7Y+s7LigIOyXrOqwgO2ZnOuPmSDtnazrp53sl6zrtoAo7Iqk7Y+s7Lig66W8IOyXrOqwgO2ZnOuPmeycvOuhnCDtnazrp53tlZjripTsp4Ap6rCE7J2YIOyDgeq0gOq0gOqzhOulvCDtjIzslYXtlZjqs6DsnpAg7ZWp64uI64ukLgoKXAoKYGBge3J9CiMjIERhdGEgcHJlcHJvY2Vzc2luZwojIHExX0Q6IOusuDEu7ZWcIOuyiCDsnbTsg4Eg7LC47Jes7ZWcIOyXrOqwgO2ZnOuPmSAtIEQuIOyKpO2PrOy4oOywuOyXrO2ZnOuPmSjrs7XsiJjsnZHri7UpOyA5OTog7JeG7J2MCiMgcTExXzNfRDog66y4MTEu7Y+J7J287JeQIO2drOunne2VmOuKlCDsl6zqsIDtmZzrj5kgLUQuIOyKpO2PrOy4oCDssLjsl6wg7Zmc64+ZOyA5ODog7JeG7J2MLCA5OTog66qo66aEL+ustOydkeuLtQojIHExMl8zX0Q6IOusuDEyLu2ctOydvOyXkCDtnazrp53tlZjripQg7Jes6rCA7Zmc64+ZIC1ELiDsiqTtj6zsuKAg7LC47JesIO2ZnOuPmTsgOTg6IOyXhuydjCwgOTk6IOuqqOumhC/rrLTsnZHri7UKZGYgPSBEQVRBWywgYygiSUQiLCAicTFfRCIsICJxMTFfM19EIiwgInExMl8zX0QiKV0KIyBOQSB0byAxCmRmW2lzLm5hKGRmKV0gPSAxCiMgMTog7LC47JesL+2drOunnSwgMDog6re466CH7KeAIOyViuydjApkZiRoYXZlID0gaWZlbHNlKGRmJHExX0QgPT0gOTksIDAsIDEpICAjIOyKpO2PrOy4oOulvCDssLjsl6ztlbTrtIQKZGYkcTExXzNfRCA9IGlmZWxzZShkZiRxMTFfM19EID09IDk5IHwgZGYkcTExXzNfRCA9PSA5OCwgMCwgMSkKZGYkcTEyXzNfRCA9IGlmZWxzZShkZiRxMTJfM19EID09IDk5IHwgZGYkcTEyXzNfRCA9PSA5OCwgMCwgMSkKIyDtj4nsnbwsIOyjvOunkCDtlansuZjquLAKZGYkd291bGQgPSBpZmVsc2UoZGYkcTExXzNfRCArIGRmJHExMl8zX0QgPT0gMCwgMCwgMSkgICMg7Iqk7Y+s7Lig66W8IO2drOunne2VqAojIO2VhOyalO2VnCDsu6zrn7zrp4wKZGYgPSBkZlssYygiSUQiLCAiaGF2ZSIsICJ3b3VsZCIpXQpgYGAKCmBgYHtyfQojIENyZWF0ZSBhIGRhdGEgZnJhbWUgcmVwcmVzZW50aW5nIHRoZSAyeDIgdGFibGUKdGFiID0gdGFibGUoZGYkaGF2ZSwgZGYkd291bGQpCiMgQ29udmVydCB0aGUgdGFibGUgdG8gYSBkYXRhIGZyYW1lCnRhYl9kZiA9IGFzLmRhdGEuZnJhbWUoYXMudGFibGUodGFiKSkKIyBSZW5hbWUgdGhlIGNvbHVtbnMKbmFtZXModGFiX2RmKSA9IGMoImhhdmUiLCAid291bGQiLCAiRnJlcXVlbmN5IikKCiMgQ3JlYXRlIGEgdGlsZSBwbG90IHVzaW5nIGdncGxvdDIKZ2dwbG90KHRhYl9kZiwgYWVzKHggPSBmYWN0b3IoaGF2ZSksIHkgPSBmYWN0b3Iod291bGQpLCBmaWxsID0gRnJlcXVlbmN5KSkgKwogIGdlb21fdGlsZSgpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc3ByaW50ZigiJWQiLCBGcmVxdWVuY3kpKSwgdmp1c3QgPSAxKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiYmVpZ2UiLCBoaWdoID0gImJyb3duIikgKwogIGxhYnModGl0bGUgPSAi7ZGcMTogMlgyIFRhYmxlIG9mIFR3byBCaW5hcnkgVmFyaWFibGVzIiwKICAgICAgIHggPSAi7Iqk7Y+s7LigIOyXrOqwgO2ZnOuPmSDtnazrp53sl6zrtoAiLAogICAgICAgeSA9ICLsiqTtj6zsuKAg7LC47Jes7Jes67aAIiwKICAgICAgIGZpbGwgPSAiRnJlcXVlbmN5IikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQpgYGAKClwKCu2RnDHsnYQg67O066m0IOuRkCDsnbTsp4Trs4DsiJjqsITsl5Ag7JaR7J2YIOyDgeq0gOq0gOqzhOqwgCDsnojsnYzsnYQg7KeQ7J6R7ZW067O8IOyImCDsnojsirXri4jri6QuCgpcCgpgYGB7cn0KY29yLnRlc3QoZGYkaGF2ZSwgZGYkd291bGQpCmBgYAoKXAoK7JyEIOqysOqzvOuKlCDtlLzslrTsiqgg7IOB6rSA6rOE7IiYIOqygOygleydhCDthrXtlbQg7Iqk7Y+s7LigIOywuOyXrOyXrOu2gChoYXZlKeyZgCDsiqTtj6zsuKAg7Jes6rCA7Zmc64+ZIO2drOunneyXrOu2gCh3b3VsZCnqsITsnZgg7IOB6rSA6rSA6rOE66W8IO2FjOyKpO2KuO2VnCDqsoPsnoXri4jri6QuIOqygOyglSDqsrDqs7wsIOycoOydmOyImOykgCA1JeyXkOyEnCDrkZAg67OA7IiYIOyCrOydtOyXkCDsnKDsnZjrr7jtlZwg7IOB6rSA6rSA6rOE6rCAIOyeiOuLpOuKlCDqsoPsnYQg7ZmV7J247ZWgIOyImCDsnojsirXri4jri6QuIOyDgeq0gOqzhOyImOydmCDqsJLsnbQgMC41NDLroZwsIOydtOuKlCDrkZAg67OA7IiY6rCAIOyWkeydmCDsg4HqtIDqtIDqs4Trpbwg6rCA7KeA6rOgIOyeiOuLpOuKlCDqsoPsnYQg7J2Y66+47ZWp64uI64ukLiDspoksIOyKpO2PrOy4oOyXkCDssLjsl6ztlZwg7IKs656M65Ok7J20IOyKpO2PrOy4oOulvCDsl6zqsIDtmZzrj5nsnLzroZwg7Z2s66ed7ZWgIOqwgOuKpeyEseydtCDrjZQg64aS64uk64qUIOqyg+ydhCDsnZjrr7jtlanri4jri6QuCgrtlZjsp4Drp4wg7IOB6rSA6rSA6rOE66eM7Jy866Gc64qUIOyduOqzvOq0gOqzhOulvCDshKTrqoXtlaAg7IiYIOyXhuyKteuLiOuLpC4g7J246rO87LaU66Gg7J2EIOychO2VtOyEnOuKlCDrjZQg7KCV67CA7ZWcIO2GteqzhOyggSDrsKnrspXsnbQg7ZWE7JqU7ZWp64uI64ukLiDsg4HqtIDqtIDqs4TripQg65GQIOuzgOyImCDsgqzsnbTsnZgg6rSA6rOE7J2YIOuwqe2WpeqzvCDqsJXrj4Trp4zsnYQg64KY7YOA64K06riwIOuVjOusuOyXkCwg7J246rO86rSA6rOE7J2YIOyhtOyerCDsl6zrtoDsmYAg6re4IOuwqe2WpeydhCDtmZXsoJXtlZjquLAg7JyE7ZW07ISc64qUIOyLpO2XmCDshKTqs4Trgpgg66ek7LmtLCDqs4Trn4nsoIHsnbggY2F1c2FsIGluZmVyZW5jZSDrsKnrspUg65Ox7J20IOyCrOyaqeuQmOyWtOyVvCDtlanri4jri6QuCgpcClwKCiMjIOyduOqzvOy2lOuhoChDYXVzYWwgaW5mZXJlbmNlKQoKXAoK7Iqk7Y+s7LigIOywuOyXrOyXrOu2gOyZgCDsiqTtj6zsuKAg7Jes6rCA7Zmc64+ZIO2drOunneyXrOu2gOqwhOydmCDslpHsnZgg7IOB6rSA6rSA6rOE6rCAIO2MjOyVheydtCDrkJjslrQsIOydtOulvCDquLDrsJjsnLzroZwg7J246rO87LaU66Gg7J2EIO2VmOqzoOyekCDtlanri4jri6QuIOyXsOq1rOydmCDrqqnsoIHsnYAg7Iqk7Y+s7LigIOywuOyXrOulvCDtlZwg7Jes67aA6rCAIOyKpO2PrOy4oCDsl6zqsIDtmZzrj5kg7Z2s66ed7ZWY64qUIOyXrOu2gOuhnCDsnbjqs7zsoIHsnLzroZwg7J207Ja07KeA64qU7KeAIOyVjOyVhOuztOuKlCDqsoPsnoXri4jri6QuIAoK7J2066W8IOychO2VtOyEnCBwcm9wZW5zaXR5IHNjb3JlIG1hdGNoaW5nKFBTTSkg67Cp67KV7Jy866GcIOyduOqzvOy2lOuhoOydhCDtlZjroKTqs6Ag7ZWp64uI64ukLiDsnbTripQg7J246rO86rSA6rOE66W8IOy2lOygle2VmOuKlCDrjbAg64SQ66asIOyCrOyaqeuQmOuKlCDrsKnrspUg7KSRIO2VmOuCmOuhnCwg6rSA7LCw65CcIOuNsOydtO2EsOyXkOyEnCDsnbjqs7ztmqjqs7zrpbwg7LaU7KCV7ZWY66Ck64qUIOyLnOuPhOulvCDshKTrqoXtlanri4jri6QuIOydtCDrsKnrspXsnZgg7ZW17Ius7J2ALCBjb250cm9sIOq3uOujuSjsiqTtj6zsuKDrpbwg7LC47Jes7ZWY7KeAIOyViuydgCDsnbTrk6Qp6rO8IHRyZWF0ZWQg6re466O5KOyKpO2PrOy4oOulvCDssLjsl6ztlZwg7J2065OkKeqwhOydmCDtmLzrj5nrs4DsiJgoY29uZm91bmRpbmcgdmFyaWFibGUpIOywqOydtOulvCDspITsnbTripQg642wIOyCrOyaqeuQmOupsCwg7J2064qUIOyduOqzvOy2lOuhoOydhCDsmZzqs6HtlaAg7IiYIOyeiOuKlCDtmLzrj5nrs4DsiJjsnZgg7JiB7Zal7J2EIOygnOqxsO2VmOuKlCDrjbAg64+E7JuA7J20IOuQqeuLiOuLpC4KClwKCuuLpOyLnCDrp5DtlbQsIOyKpO2PrOy4oCDssLjsl6zsl6zrtoDsmYAg7Iqk7Y+s7LigIOyXrOqwgO2ZnOuPmSDtnazrp53sl6zrtoDqsITsnZgg7J246rO86rSA6rOE66W8IOy2lOuhoO2VmOugpOuptCwg65GQIOuzgOyImCDqsITsnZgg6rSA6rOE7JeQIOyYge2WpeydhCDspIQg7IiYIOyeiOuKlCDtmLzrj5nrs4DsiJjrk6TsnYQg6rOg66Ck7ZWY7JesIOunpOy5reydhCDtlbTslbztlanri4jri6QuIO2VtOuLuSDsl7Dqtawg66qp7ZGc7JmAIOq0gOugqO2VmOyXrCDri6TsnYwg67OA7IiY65Ok7J2EIO2YvOuPmeuzgOyImOuTpOuhnCDqs6DroKTtlbTrs7wg7IiYIOyeiOyKteuLiOuLpDoKCi0gKipxMzkgfiBxNDRfMSjsnZHri7XsnpDsnZgg7J246rWs7Ya16rOE7ZWZ7KCBIO2KueyEsSkqKjog7J2R64u17J6Q7J2YIOyEseuzhCwg7Jew66C5LCDtlZnroKUg65Ox7J2AIOyKpO2PrOy4oCDssLjsl6zsmYAg7Leo66+4IO2ZnOuPmeydmCDsnZjsgqwg6rKw7KCV7JeQIOyYge2WpeydhCDrr7jsuaAg7IiYIOyeiOuKlCDtlbXsi6wg7JqU7J247J6F64uI64ukLgotICoqcTQ1LCBxNDlfMSjqsr3soJzsoIEg7ZmY6rK9KSoqOiDsnZHri7XsnpDsnZgg6rK97KCc7KCBIO2ZmOqyveydgCDsiqTtj6zsuKAg7LC47Jes7JeQIO2VhOyalO2VnCDsnqzsoJXsoIEg7JqU7IaM66W8IOuwmOyYge2VmOyXrCwg7LC47JesIOydmOyCrOuCmCDtnazrp50g7Jes67aA7JmAIOq0gOugqOuQnCDspJHsmpTtlZwg7ISk66qFIOuzgOyImOuhnCDsnpHsmqntlaAg6rKD7J6F64uI64ukLgotICoqRE05LCBETTEwKOyngOyXreq3nOuqqCwg6raM7JetKSoqOiDqsbDso7wg7KeA7Jet7J2YIO2KueyEseydgCDsiqTtj6zsuKAg7Iuc7ISkIOygkeq3vOyEseqzvCDqtIDroKjsnbQg7J6I7J2EIOyImCDsnojsnLzrr4DroZwg7KSR7JqU7ZWcIOuzgOyImOuhnCDrs7wg7IiYIOyeiOyKteuLiOuLpC4KLSAqKnEyOCjsnbwv7ZWZ7JeF6rO8IOyXrOqwgOydmCDqt6DtmJUpKio6IOydvOqzvCDsl6zqsIDsnZgg6reg7ZiV7J20IOyWvOuniOuCmCDsnpgg7J2066Oo7Ja07KeA6rOgIOyeiOuKlOyngOuKlCDsiqTtj6zsuKAg7Zmc64+ZIOywuOyXrCDsl6zrtoDsl5Ag7JiB7Zal7J2EIOykhCDsiJgg7J6I7Iq164uI64ukLgotICoqcTM0KOuzuOyduOydmCDqsbTqsJXsg4Htg5wg7J247IudKSoqOiDqsbTqsJUg7IOB7YOc64qUIOyKpO2PrOy4oCDtmZzrj5kg7LC47JesIOyXrOu2gOyZgCDsp4HsoJHsoIHsnbgg6rSA66Co7J20IOyeiOydhCDsiJgg7J6I7Jy866+A66GcIOykkeyalO2VnCDrs4DsiJjroZwg6rOg66Ck65CgIOyImCDsnojsirXri4jri6QuCgpgYGB7cn0KIyMgRGF0YSBwcmVwcm9jZXNzaW5nCiMgKOydkeuLteyekOydmCDsnbjqtazthrXqs4QpCiMgcTM5OiDstZzsooXtlZnroKUKIyBxNDA6IO2YvOyduOyDge2DnAojIHE0MTog66eMIOuCmOydtAojIHE0Mzog6rCA6rWs7KO8IOyXrOu2gAojIHE0M18yOiDshLHrs4QKIyBxNDRfMTog7J6l7JWg65Ox66GdIOyXrOu2gAojICjqsr3soJzsoIEg7ZmY6rK9KQojIHE0NTog7KeA64KcIDHso7zqsIQg6rK97KCc7Zmc64+ZIOyXrOu2gAojIHE0OV8xOiDsm5Qg7Y+J6regIOyGjOuTnQojICjsp4Dsl60g67CPIOyngOyXrSDqt5zrqqgpCiMgRE05OiDsp4Dsl60g6rec66qoCiMgRE0xMDog6raM7JetCiMgKOydvC/tlZnsl4Xqs7wg7Jes6rCA7J2YIOq3oO2YlSkKIyBxMjg6IOydvCjtlZnsl4Up6rO8IOyXrOqwgOydmCDqt6DtmJUKIyAo67O47J247J2YIOqxtOqwleyDge2DnCDsnbjsi50pCiMgcTM0OiDrs7jsnbjsnZgg6rG06rCV7IOB7YOcIOyduOyLnQoKZGYyID0gREFUQVssIGMoIklEIiwgInEzOSIsICJxNDAiLCAicTQxIiwgInE0MyIsICJxNDNfMiIsICJxNDRfMSIsICJxNDUiLCAicTQ5XzEiLCAiRE05IiwgIkRNMTAiLCAicTI4IiwgInEzNCIpXQpkZjMgPSBtZXJnZShkZiwgZGYyLCBieSA9ICJJRCIpICAjIEpvaW5pbmcgdHdvIGRhdGFmcmFtZXMgb24gYSBtYXRjaGluZyBJRApkZjMgPSBkZjNbLCAtMV0gICMgTm8gbmVlZCBmb3IgIklEIiBjb2x1bW4gYW55bW9yZQpkZjNbXSA9IGxhcHBseShkZjMsIGFzLm51bWVyaWMpICAjIGJlY2F1c2UgdGhlIGRhdGEgd2FzIGluIHNwc3MgZm9ybQpkZjMkcTM5ID0gaWZlbHNlKGRmMyRxMzkgPD0gNCwgMCwgMSkgICMg6rOg7KG47J207ZWYOiAwIC8g64yA7KG47J207IOBOiAxCmRmMyRxNDAgPSBpZmVsc2UoZGYzJHE0MCA9PSAxLCAwLCAxKSAgIyDrr7jtmLw6IDAgLyDquLDtmLwsIOyCrOuzhCwg7J207Zi8IOuTsTogMQpkZjMkcTQ0XzEgPSBpZmVsc2UoZGYzJHE0NF8xID09IDEsIDAsIDEpICAjIOyXhuydjDogMCwg7J6l7JWgOiAxCmRmMyRxNDlfMSA9IGlmZWxzZShkZjMkcTQ5XzEgPD0gMywgMCwgMSkgICMgMjAw66eMIOuvuOunjDogMCwgMjAw66eMIOydtOyDgTogMQpkZjMkcTM0ID0gaWZlbHNlKGRmMyRxMzQgPD0gMywgMCwgaWZlbHNlKGRmMyRxMzQgPT0gNCwgMSwgMikpICAjIOuztO2GtSDsnbTtlZg6IDAsIOuztO2GtTogMSwg67O07Ya1IOydtOyDgTogMgpkZjMkcTI4ID0gaWZlbHNlKGRmMyRxMjggPD0gMywgMCwgaWZlbHNlKGRmMyRxMjggPT0gNCwgMSwgMikpICAjIOq3oO2YlSDsnbTtlZg6IDAsIOq3oO2YlTogMSwg6reg7ZiVIOydtOyDgTogMgojIENvbnZlcnQgYWxsIGNvbHVtbnMgZXhjZXB0IHRoZSBleGNsdWRlZCBvbmUgdG8gZmFjdG9ycwpkZjNbIWNvbG5hbWVzKGRmMykgJWluJSBjKCJxNDEiKV0gPSBsYXBwbHkoZGYzWyFjb2xuYW1lcyhkZjMpICVpbiUgYygicTQxIildLCBhcy5mYWN0b3IpCmBgYAoKYGBge3J9CmRmMwpgYGAKCmBgYHtyfQpzZXQuc2VlZCgwKQoKIyMgRXN0aW1hdGUgUHJvcGVuc2l0eSBTY29yZXM6CiMgV2UgZmlyc3QgZXN0aW1hdGUgdGhlIHByb3BlbnNpdHkgc2NvcmVzIGZvciB0aGUgImhhdmUiIHZhcmlhYmxlLCBiYXNlZCBvbiB0aGUgY292YXJpYXRlcyB3ZSB3YW50IHRvIGNvbnRyb2wgZm9yLiBUaGlzIGludm9sdmVzIGZpdHRpbmcgYSBsb2dpc3RpYyByZWdyZXNzaW9uIG1vZGVsIHByZWRpY3RpbmcgImhhdmUiIGZyb20gdGhlIGNvdmFyaWF0ZXMuCgojIyBNYXRjaGluZwojIG1hdGNoaXQoKSB3aWxsIHBlcmZvcm0gbmVhcmVzdCBuZWlnaGJvciBtYXRjaGluZywgYnV0IHRoZXJlIGFyZSBtYW55IG90aGVyIG1ldGhvZHMgYXZhaWxhYmxlIGluIE1hdGNoSXQuIFRoZSByZXN1bHQgb2YgdGhlIG1hdGNoIHdpbGwgYmUgc3RvcmVkIGluIG0ub3V0LgoKYWxsX3ZhcnMgPSBzZXRkaWZmKG5hbWVzKGRmMyksIGMoImhhdmUiLCAid291bGQiKSkKZm9ybXVsYSA9IGFzLmZvcm11bGEocGFzdGUoImhhdmUgfiIsIHBhc3RlKGFsbF92YXJzLCBjb2xsYXBzZSA9ICIgKyAiKSkpCm0ub3V0ID0gbWF0Y2hpdChmb3JtdWxhLCBkYXRhID0gZGYzLCBtZXRob2QgPSAib3B0aW1hbCIpCmBgYAoKYGBge3J9CiMjIEFzc2Vzc2luZyBiYWxhbmNlCiMgQmVmb3JlIGNvbmR1Y3RpbmcgdGhlIGNhdXNhbCBpbmZlcmVuY2UgYW5hbHlzaXMsIHdlIHNob3VsZCBhc3Nlc3Mgd2hldGhlciBtYXRjaGluZyBoYXMgaW1wcm92ZWQgdGhlIGJhbGFuY2Ugb2YgdGhlIGNvdmFyaWF0ZXMgYWNyb3NzIHRoZSB0cmVhdGVkIGFuZCBjb250cm9sIGdyb3Vwcy4KbG92ZS5wbG90KG0ub3V0LCBhYnMgPSBUUlVFLCBiaW5hcnkgPSAic3RkIiwgdGhyZXNob2xkID0gMC4xNSwgbGltaXRzID0gYygwLCAxKSwgcG9zaXRpb24gPSAidG9wIiwgZHJvcC5kaXN0YW5jZSA9IFRSVUUpCmBgYAoKXAoKUHJvcGVuc2l0eSBTY29yZSBNYXRjaGluZyhQU00p7JeQ7IScIOq3oO2YlSDtj4nqsIAoYXNzZXNzaW5nIGJhbGFuY2Up66W8IO2VmOuKlCDrqqnsoIHsnYAg7LKY66asIOq3uOujueqzvCDrjIDsobAg6re466O5IOqwhOydmCDtmLzrj5nrs4DsiJjqsIAg67mE7Iq37ZWY6rKMIOu2hO2PrOuQmOyWtCDsnojripTsp4Ag7ZmV7J247ZWY6riwIOychO2VqOyeheuLiOuLpC4g7J2064qUIOq0gOywsCDsl7Dqtazsl5DshJwg7LKY66asIO2aqOqzvOulvCDstpTsoJXtlaAg65WMIO2YvOuPmeuzgOyImOuhnCDsnbjtlZwg7Y647Zal7J2EIOykhOydtOq4sCDsnITtlZwg7KSR7JqU7ZWcIOuLqOqzhOyeheuLiOuLpC4KCuq3oO2YlSDtj4nqsIDsl5DshJwg7ZmV7J247ZW07JW8IO2VoCDso7zsmpQg7JqU7IaM64qUIOuLpOydjOqzvCDqsJnsirXri4jri6Q6CgotICoq7ZGc7KSA7ZmUIO2Pieq3oCDssKjsnbQoU3RhbmRhcmRpemVkIE1lYW4gRGlmZmVyZW5jZXMsIFNNRCkqKjog7LKY66asIOq3uOujueqzvCDrjIDsobAg6re466O5IOqwhOydmCDtmLzrj5nrs4DsiJjsnZgg7ZGc7KSA7ZmU65CcIO2Pieq3oCDssKjsnbTrpbwg6rOE7IKw7ZWp64uI64ukLiDsnbQg6rCS7J20IDDsl5Ag6rCA6rmM7Jq47IiY66GdIO2YvOuPmeuzgOyImOqwgCDrkZAg6re466O5IOqwhOyXkCDsnpgg6reg7ZiV65CY7Ja0IOyeiOuLpOuKlCDqsoPsnYQg64KY7YOA64OF64uI64ukLgotICoq7J6E6rOE6rCSKFRocmVzaG9sZCkqKjog7J2867CY7KCB7Jy866GcIFNNROydmCDsoIjrjIDqsJLsnbQgMC4xIOuYkOuKlCAwLjE1IOuvuOunjOydtOuptCDqt6DtmJXsnbQg7J6YIOuQmOyXiOuLpOqzoCDtjJDri6jtlanri4jri6QuIOydtCDsnoTqs4TqsJLsnYQg7LSI6rO87ZWY66m0IO2VtOuLuSDtmLzrj5nrs4DsiJjripQg65GQIOq3uOujuSDqsITsl5Ag7LCo7J206rCAIOyeiOuLpOqzoCDtjJDri6jrkKnri4jri6QuCi0gKirqt6DtmJUg6re4656Y7ZSEKEJhbGFuY2UgUGxvdCkqKjogTG92ZShUaG9tYXMgTG92ZSkgcGxvdOqzvCDqsJnsnYAg6reg7ZiVIOq3uOuemO2UhOuKlCDsi5zqsIHsoIHsnLzroZwg7Zi864+Z67OA7IiY7J2YIOq3oO2YlSDsg4Htg5zrpbwg7ZmV7J247ZWgIOyImCDsnojripQg64+E6rWs7J6F64uI64ukLiDrp6Tsua0g7KCE7ZuE7J2YIFNNROulvCDruYTqtZDtlZjsl6wg66ek7Lmt7J2YIO2aqOqzvOulvCDtj4nqsIDtlaAg7IiYIOyeiOyKteuLiOuLpC4KCuunpOy5reydtCDsnpgg65CY7JeI64uk64qUIOqyg+ydgCDsspjrpqwg6re466O56rO8IOuMgOyhsCDqt7jro7kg6rCE7J2YIOqzteuzgOufieydtCDruYTsirftlZjqsowg67aE7Y+s65CY7Ja0IOyeiOycvOupsCwg7Zi864+ZIO2aqOqzvOulvCDstZzshoztmZTtlZjsl6wg7LKY66as7J2YIOyduOqzvCDtmqjqs7zrpbwg67O064ukIOygle2Zle2VmOqyjCDstpTsoJXtlaAg7IiYIOyeiOuLpOuKlCDqsoPsnYQg7J2Y66+47ZWp64uI64ukLgoK7JyEIOq3uOumvOydhCDrs7TrqbQg7KGw7KCVIO2bhCDsoIjrsJgg7KCV64+E66eMIO2YvOuPmeuzgOyImOqwgCDsnoTqs4TqsJIg64K07JeQIOyeiOqzoCwg7J2064qUIOq3oO2YleydtCDsnbTro6jslrTsoYzri6TripQg7Kad6rGw64qUIOuQmOyngCDrqrvtlanri4jri6QuCgpcCgpgYGB7cn0KIyMgQ2F1c2FsIGluZmVyZW5jZQojIEFmdGVyIG1hdGNoaW5nLCB3ZSBjYW4gYW5hbHl6ZSB0aGUgZWZmZWN0IG9mICJoYXZlIiBvbiAid291bGQiIGJ5IGZpdHRpbmcgYSBtb2RlbCB0byB0aGUgbWF0Y2hlZCBkYXRhLgoKbWF0Y2hlZF9kYXRhID0gbWF0Y2guZGF0YShtLm91dCkKY2F1c2FsX21vZGVsID0gZ2xtKHdvdWxkIH4gaGF2ZSwgZGF0YSA9IG1hdGNoZWRfZGF0YSwgZmFtaWx5ID0gYmlub21pYWwpCnN1bW1hcnkoY2F1c2FsX21vZGVsKQpgYGAKClwKCi0gKirsiqTtj6zsuKAg7LC47Jes7Jes67aA7J2YIOyKpO2PrOy4oCDsl6zqsIDtmZzrj5kg7Z2s66ed7Jes67aA7JeQIOuMgO2VnCDsnbjqs7wg7Zqo6rO8Kio6ICJoYXZlIijsiqTtj6zsuKAg7LC47Jes7Jes67aAKeydmCDqs4TsiJjripQgMy4wMDbsnLzroZwsIOydtCDqsJLsnZgg7KeA7IiY64qUICJoYXZlIuqwgCDsnojsnYQg65WM7JmAIOyXhuydhCDrlYwgIndvdWxkIijsiqTtj6zsuKAg7Jes6rCA7Zmc64+ZIO2drOunneyXrOu2gCnsnZgg7Jik7KaI67mEKG9kZHMgcmF0aW8p7J6F64uI64ukLiDsnbQg7JaR7J2YIOqwkuydgCAiaGF2ZSLsnZgg7KG07J6s6rCAICJ3b3VsZCLsnZgg6rCA64ql7ISx7J2EIO2BrOqyjCDspp3qsIDsi5ztgqjri6TripQg6rKD7J2EIOuCmO2DgOuDheuLiOuLpC4g66ek7LmtIOqzvOygleydtCDtmLzrj5kg67OA7IiY66W8IOyEseqzteyggeycvOuhnCDthrXsoJztlojri6TrqbQsIOydtOqyg+ydgCDsnbjqs7wg6rSA6rOE7J2YIOymneqxsOuhnCDtlbTshJ3rkKAg7IiYIOyeiOyKteuLiOuLpC4KCi0gKirthrXqs4TsoIEg7Jyg7J2Y7ISxKio6ICJoYXZlIuydmCDrp6TsmrAg64Ku7J2AIHAg6rCS7J2AIO2aqOqzvOqwgCDthrXqs4TsoIHsnLzroZwg7Jyg7J2Y7ZWY64uk64qUIOqyg+ydhCDrgpjtg4Drg4Xri4jri6QuIOydtOuKlCAiaGF2ZSLqsIAgIndvdWxkIuyXkCDsnbjqs7zsoIEg7JiB7Zal7J2EIOuvuOy5oCDsiJgg7J6I64uk64qUIOyDneqwgeydhCDrjZTsmrEg7KeA7KeA7ZWp64uI64ukLgoKLSAqKuuqqOuNuCDsoIHtlanshLHqs7wgQUlDKio6IOu2hOyCsOydmCDqsJDshozsmYAgQUlDIOqwkuydgCDrqqjrjbgg7KCB7ZWp7ISx7J2YIOyngO2RnOydvCDsiJgg7J6I7Iq164uI64ukLiDsnbTqsoPrk6TsnYAg7J2867CY7KCB7Jy866GcIOyYiOy4oSDshLHriqXqs7wg642UIOq0gOugqOydtCDsnojsp4Drp4wsIOyemCDsoIHtlanrkJwg66qo64247J2AIOyduOqzvOyggSDtlbTshJ3sl5Ag64yA7ZWcIO2ZleyLoOydhCDrjZTtlaAg7IiYIOyeiOyKteuLiOuLpC4gTnVsbCBkZXZpYW5jZeuKlCDrs4DsiJjrpbwg64Sj7KeAIOyViuyVmOydhCDrlYwsIFJlc2lkdWFsIGRldmlhbmNl64qUIOyEpOuqheuzgOyImOulvCDstpTqsIDtlZjsmIDsnYQg65WM7J2YIOu2hOyCsOyeheuLiOuLpC4g7ISk66qF67OA7IiY66W8IOy2lOqwgO2VnCDtm4Qg67aE7IKw7J20IOykgCDqsoPsnYQg67O066m0IOyemCDsoIHtlanrkJwg66qo64247J2065286rOgIO2VoCDsiJgg7J6I7Iq164uI64ukLgoKLSAqKuqwgOyglSoqOiDsnbjqs7wg7LaU66Gg7J2AIOunpOy5rSDqs7zsoJXsl5DshJwg66qo65OgIO2YvOuPmSDrs4DsiJjrpbwg7Ya17KCc7ZaI64uk64qUIOqwgOygleyXkCDsnZjsobTtlanri4jri6QuIOydtOulvCDsuKHsoJXrkJjsp4Ag7JWK7J2AIO2YvOuPmSDrs4DsiJjqsIAg7JeG64uk64qUIOqwgOygleydtOudvOqzoOuPhCDtlanri4jri6QuIOydtCDqsIDsoJXsnbQg7Jyg7Zqo7ZWY64uk66m0LCDrp6Tsua0g6rO87KCV7J2AIOu5hOq1kCDqsIDriqXtlZwg6re466O57J2EIOyDneyEse2VmOuvgOuhnCDsnbjqs7zsoIEg7ZW07ISd7J20IOqwgOuKpe2VqeuLiOuLpC4g7ZWY7KeA66eMLCBsb3ZlIHBsb3TsnYQg6re466awIOqysOqzvCDrqqjrk6Ag7Zi864+ZIOuzgOyImOqwgCDthrXsoJzrkJjsl4jri6TripQg6rCA7KCV7J2AIOydtOujqOyWtOyhjOuLpOqzoCDtlZjquLAg7Ja066C17Iq164uI64ukLgoKXApcCgojIyDqsrDroaAKClwKCuyalOyVve2VmOuptCwg6rKw6rO864qUICoq7Iqk7Y+s7LigIOywuOyXrOyXrOu2gCoq7JmAICoq7Iqk7Y+s7LigIOyXrOqwgO2ZnOuPmSDtnazrp53sl6zrtoAqKiDsgqzsnbTsnZgg6rCV7ZWcIOyXsOq0gOyEseydhCDrgpjtg4Drgqzsp4Drp4wsIOunpOy5rSDqs7zsoJXsnbQg6rSA66CoICoq7Zi864+ZIOuzgOyImOulvCDrqqjrkZAg6reg7ZiV7Iuc7YKk64qUIOuNsCDshLHqs7XtlZjsp4Ag66q77ZWY7JiA7Iq164uI64ukKiouIOunjOyVvSwgKirsnbjqs7zstpTroaDsnYQg7JyE7ZWcIOqwgOygleydtCDsnKDtmqjtlZjri6TrqbQg7J246rO87Zqo6rO866GcIO2VtOyEnSoq65CgIOyImCDsnojsirXri4jri6QuCgpcCgpQcm9wZW5zaXR5IHNjb3JlIG1hdGNoaW5n7J2EIOyCrOyaqe2VnCDsg4Htmansl5DshJwg7Zi864+ZIOuzgOyImOulvCDrqqjrkZAg6reg7ZiV7Iuc7YKk7KeAIOuqu+2WiOuLpOuptCwg64uk7J2M6rO8IOqwmeydgCDsobDsuZjrpbwg7Leo7ZW0IOuzvCDsiJgg7J6I7Iq164uI64ukOgoKLSAqKuuLpOuluCDrp6Tsua0g6riw67KVIOyggeyaqSoqOiDtlITroZztjpzsi5zti7Ag7Iqk7L2U7Ja0IOunpOy5rSDsmbjsl5Drj4Qg64uk7JaR7ZWcIOunpOy5rSDquLDrspXsnbQg7J6I7Jy866+A66GcLCDqt7gg7KSRIOydvOu2gOulvCDsoIHsmqntlbQg67O8IOyImCDsnojsirXri4jri6QuIOyYiOulvCDrk6TslrQsIOy1nOyggSDrp6Tsua0ob3B0aW1hbCBtYXRjaGluZyksIOy7pOuEkCDrp6Tsua0oa2VybmVsIG1hdGNoaW5nKSwgTWFoYWxhbm9iaXMg6rGw66asIOunpOy5rSDrk7HsnYQg7IKs7Jqp7ZW0IOuzvCDsiJgg7J6I7Iq164uI64ukLiDrmJDtlZwg66ek7LmtIOuwqeuyleydmCDshLjrtoAg7YyM652866+47YSw66W8IOyhsOygle2VtCDrs7TripQg6rKD64+EIOuwqeuyleyeheuLiOuLpC4KLSAqKu2ajOq3gCDrtoTshJ0g7IKs7JqpKio6IOunpOy5rSDtm4Tsl5Drj4Qg7Zi864+ZIOuzgOyImOydmCDqt6DtmJXsnbQg66ee7KeAIOyViuuKlOuLpOuptCwg7ZqM6reAIOuqqOuNuOydhCDsgqzsmqntlZjsl6wg7Zi864+ZIOuzgOyImOulvCDsobDsoJXtlaAg7IiYIOyeiOyKteuLiOuLpC4g7ZqM6reAIOu2hOyEneydhCDthrXtlbQg7Zi864+ZIOuzgOyImOydmCDsmIHtlqXsnYQg7KCc7Ja07ZWY66m07IScIO2aqOqzvOulvCDstpTsoJXtlaAg7IiYIOyeiOyKteuLiOuLpC4KLSAqKuuNsOydtO2EsCDsnqzqsoDthqAqKjog7Zi864+ZIOuzgOyImOqwgCDqt6DtmJXrkJjsp4Ag7JWK7JWY64uk66m0LCDsgqzsmqnrkJwg642w7J207YSw7JeQIOusuOygnOqwgCDsnojsnYQg7IiY64+EIOyeiOyKteuLiOuLpC4g642w7J207YSwIOyghOyymOumrCDqs7zsoJUsIOqysOy4oey5mCDsspjrpqwsIOuzgOyImCDshKDtg50g65Ox7J2EIOuLpOyLnCDqsoDthqDtlbQg67O064qUIOqyg+ydtCDtlYTsmpTtlaAg7IiYIOyeiOyKteuLiOuLpC4KLSAqKuu2hOyEnSDrsKnrspUg67OA6rK9Kio6IOunpOy5rSDquLDrspUg7J6Q7LK06rCAIOyggeygiO2VmOyngCDslYrsnYQg7IiY64+EIOyeiOycvOuvgOuhnCwg64uk66W4IOyduOqzvOy2lOuhoCDrsKnrspXsnYQg6rOg66Ck7ZW0IOuzvCDsiJgg7J6I7Iq164uI64ukLiDrj4Tqtawg67OA7IiYIOq4sOuylShpbnN0cnVtZW50YWwgdmFyaWFibGUpLCDspJHssqkg66Gc7KeA7Iqk7YuxIO2ajOq3gChjb25kaXRpb25hbCBsb2dpc3RpYyByZWdyZXNzaW9uKSDrk7Eg64uk66W4IOy2lOuhoCDrsKnrspXsnYQg7YOQ7IOJ7ZW0IOuzvCDsiJgg7J6I7Iq164uI64ukLgotICoq7Y647Zal7J2YIOy2nOyymCDtg5Dsg4kqKjog7Zi864+ZIOuzgOyImOqwgCDqt6DtmJXrkJjsp4Ag7JWK64qUIOybkOyduOydhCDtjIzslYXtlZjroKTrqbQsIO2OuO2WpeydtCDrsJzsg53tlZwg7JuQ7J247J2EIOu2hOyEne2VtOyVvCDtlaAg7IiY64+EIOyeiOyKteuLiOuLpC4g7J2066W8IO2Gte2VtCDtjrjtlqXsnYQg7KSE7J206rGw64KYIOuztOygle2VoCDsiJgg7J6I64qUIOuwqeuyleydhCDssL7snYQg7IiYIOyeiOyKteuLiOuLpC4KClwKXAoKCg==